home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / util / wb / md1_8.lha / MultiDisplay / SrC / mdappicon.c < prev    next >
C/C++ Source or Header  |  1997-09-06  |  4KB  |  114 lines

  1. /*
  2. **
  3. ** MULTI DISPLAY
  4. ** " Le vrai-faux viewer universel "
  5. */
  6. #include <stdio.h>
  7.  
  8. #include <exec/memory.h>            /* AllocMem() */
  9. #include <exec/ports.h>             /* struct MsgPort */
  10. #include <workbench/startup.h>      /* struct WBArg */
  11. #include <workbench/workbench.h>    /* struct AppMessage */
  12.  
  13. #include <pragmas/dos_pragmas.h>
  14. #include <pragmas/exec_pragmas.h>
  15. #include <pragmas/icon_pragmas.h>
  16.  
  17. #include "md_strings.h"
  18.  
  19. /* Prototypes des fonctions */
  20. extern BOOL Recherche(STRPTR arg);
  21. extern BOOL RTInfo(STRPTR body);
  22. extern STRPTR GetString(struct LocaleInfo *li, LONG stringNum);
  23.  
  24. extern struct Library *SysBase,*DOSBase,*IconBase;
  25. extern struct LocaleInfo md_locale; /* Pour GetString() */
  26. struct DiskObject *md_appicon=NULL; /* AppIcon pour MD */
  27.  
  28. /* Cree l'appicon sur le Workbench
  29.    Necessite icon.library et workbench.library */
  30. BOOL CreerIcone(void)
  31. {
  32.     struct MsgPort *msgport;
  33.     struct AppIcon *appicon;
  34.     struct AppMessage *appmsg;
  35.     struct WBArg *argptr;
  36.     ULONG i;
  37.     BPTR old_dir;
  38.     BOOL result=TRUE,stop=FALSE;
  39.  
  40.     if( !md_appicon )
  41.     {
  42.         RTInfo(GetString(&md_locale,MSG_NOICON));
  43.         return FALSE;
  44.     }
  45.     /* On s'assure que l'appicon va apparaitre en haut a gauche */
  46.     md_appicon->do_CurrentX = 5;
  47.     md_appicon->do_CurrentY = 5;
  48.  
  49.     if( msgport = CreateMsgPort() )
  50.     {
  51.         /* Creation de l'appicon : id et userdata sont uniquement a l'usage de l'utilisateur */
  52.         appicon = (struct AppIcon *)AddAppIcon(1, 0, GetString(&md_locale,MSG_ICON_TITLE), msgport, NULL, md_appicon, NULL);
  53.         if( appicon )
  54.         {
  55.             do
  56.             {
  57.                 /* Attente du premier message */
  58.                 WaitPort(msgport);
  59.                 /* Recuperation de tous les eventuels messages */
  60.                 while( appmsg = (struct AppMessage *)GetMsg(msgport) )
  61.                 {
  62. #ifdef DEBUG
  63.                     printf("Message de %ld arguments\n",appmsg->am_NumArgs);
  64. #endif
  65.                     /* On procede comme dans TraitementWB() */
  66.                     argptr = appmsg->am_ArgList;
  67.                     /* Si NumArgs vaut 0 , l'utilisateur a double-clique sur l'icone
  68.                        C'est donc qu'il veut arreter */
  69.                     if( appmsg->am_NumArgs != 0 )
  70.                         for(i=0;i<appmsg->am_NumArgs;i++,argptr++)
  71.                         {
  72. #ifdef DEBUG
  73.                             printf("Argument %ld: %s, (Lock=%lx)\n",i,argptr->wa_Name,argptr->wa_Lock);
  74. #endif
  75.                             /* La aussi il faut changer de repertoire */
  76.                             old_dir = CurrentDir(argptr->wa_Lock);
  77.                             /* On ne peut pas avoir de joker */
  78.                             Recherche(argptr->wa_Name);
  79.                             CurrentDir(old_dir);
  80.                         }
  81.                     else stop = TRUE;
  82.                     /* On repond au message pour s'en debarasser */
  83.                     ReplyMsg((struct Message *)appmsg);
  84.                 }
  85.             }
  86.             while( stop == FALSE );
  87.             /* On enleve l'appicon */
  88.             RemoveAppIcon(appicon);
  89.         }
  90.         else
  91.         {
  92. #ifdef DEBUG
  93.             printf("Impossible de créer l'AppIcon\n");
  94. #endif
  95.             result = FALSE;
  96.         }
  97.         DeleteMsgPort(msgport);
  98.     }
  99.     else
  100.     {
  101. #ifdef DEBUG
  102.         printf("Impossible de créer le port message\n");
  103. #endif
  104.         result = FALSE;
  105.     }
  106.  
  107.     /* On n'oublie pas de liberer la structure DiskObject (icon.library !) */
  108.     FreeDiskObject(md_appicon);
  109.     md_appicon = NULL;
  110.     /* On confirme a l'utilisateur en le remerciant */
  111.     RTInfo(GetString(&md_locale,MSG_QUIT_APPICON));
  112.     return result;
  113. }
  114.